<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Microsoft IIS 7.0 及更高版本</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="install.windows.iis6.html">Microsoft IIS 5.1 和 IIS 6.0</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="install.windows.apache1.html">Microsoft Windows 下的 Apache 1.3.x</a></div>
 <div class="up"><a href="install.windows.html">Windows 系统下的安装</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="install.windows.iis7" class="sect1">
 <h2 class="title">Microsoft IIS 7.0 及更高版本</h2>
 <p class="para">
  本章包含有在 Windows Vista SP1，Windows 7，Windows Server 2008 以及
  Windows Server 2008 R2下的 IIS 7.0 以及更高版本中手工安装 PHP
  的指南。有关在 Windows XP 和 Windows Server 2003 
  下的 IIS 5.1 和 IIS 6.0 中安装 PHP 的指南见
  <a href="install.windows.iis6.html" class="link">Microsoft IIS 5.1 和 IIS 6.0</a> 一章。
 </p>
 <div class="sect2" id="install.windows.iis7.fastcgi.enable">
  <h3 class="title">在 IIS 中激活 FastCGI 支持</h3>
  <p class="para">
   默认安装的 IIS 中 FastCGI 模块被关闭。要激活其的步骤在不同版本的 Windows 下不同。
  </p>
  <p class="para">
   要在 Windows Vista SP1 和 Windows 7 中激活 FastCGI 支持：
   <div class="procedure">
    <ol type="1"><li>
     <p class="simpara">
      在 Windows 开始菜单中选择“运行...”（或在搜索框内），输入“optionalfeatures.exe”并按“确定”（或敲回车键）；
     </p>
    </li>
    <li>
     <p class="simpara">
      在“Windows 功能”对话框中展开“Internet
      信息服务”，“万维网服务”，“应用程序开发功能”，并选中“CGI”的选择框；
     </p>
    </li>
    <li>
     <p class="simpara">
      点击确定按钮并等待安装完成。
     </p>
    </li>
   </ol></div>
   <div class="mediaobject">
    
    <div class="imageobject">
     <img src="images/b4cf2bb34e3c20eebcf8f9e8e7949efd-iis7vistacgi.png" alt="在 Windows Vista SP1 和 Windows 7 中激活 FastCGI 支持" width="429" height="375" />
    </div>
   </div>
  </p>
  <p class="para">
   要在 Windows Server 2008 和 Windows Server 2008 R2 中激活 FastCGI 支持：
   <div class="procedure">
    <ol type="1"><li>
     <p class="simpara">
      在 Windows 开始菜单中选择 &quot;Run:&quot;，输入 &quot;CompMgmtLauncher&quot;
      并点击 &quot;Ok&quot;；
     </p>
    </li>
    <li>
     <p class="simpara">
      如果在 &quot;Roles&quot; 节点下没有 &quot;Web Server (IIS)&quot; role，则点击
      &quot;Add Roles&quot; 添加之；
     </p>
    </li>
    <li>
     <p class="simpara">
      如果存在 &quot;Web Server (IIS)&quot; role，则点击 &quot;Add Role Services&quot; 并激活
      &quot;Application Development&quot; 组之下的 &quot;CGI&quot; 选择框；
     </p>
    </li>
    <li>
     <p class="simpara">
      点击 &quot;Next&quot; 及 &quot;Install&quot;，等待安装完成。
     </p>
    </li>
   </ol></div>
   <div class="mediaobject">
    
    <div class="imageobject">
     <img src="images/b4cf2bb34e3c20eebcf8f9e8e7949efd-iis7w2k8cgi.png" alt="在 Windows Server 2008 和 Windows Server 2008 R2 中激活 FastCGI 支持" width="546" height="411" />
    </div>
   </div>
  </p>
 </div>
 <div class="sect2" id="install.windows.iis7.fastcgi.conf">
  <h3 class="title">配置 IIS 以处理 PHP 请求</h3>
  <p class="para">
   根据<a href="install.windows.manual.html" class="link">手工安装步骤</a>的说明下载和安装 PHP。
    <blockquote class="note"><p><strong class="note">Note</strong>: 
     <p class="para">
      在使用 IIS 时推荐使用非线程安全的 PHP。可以在
      <a href="http://windows.php.net/download/" class="link external">&raquo;&nbsp;PHP for Windows: 
      Binaries and Sources Releases</a> 下载。
     </p>
    </p></blockquote>
  </p>
  <p class="para">
   按以下示例在 <var class="filename">php.ini</var> 文件中配置
   针对 CGI- 和 FastCGI- 的指令：
   <div class="example" id="example-42">
    <p><strong>Example #1 <var class="filename">php.ini</var> 中的 CGI 和 FastCGI 设定</strong></p>
    <div class="example-contents">
<div class="inicode"><pre class="inicode">fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0</pre>
</div>
    </div>

   </div>
  </p>
  <p class="para">
   通过 IIS 管理界面或者命令行工具配置对应于 PHP 的 IIS 程序映射。
  </p>
  <div class="sect3" id="install.windows.iis7.fastcgi.conf.ui">
   <h4 class="title">使用 IIS 管理界面来创建 PHP 的程序映射</h4>
    <p class="para">
     按照以下步骤在 IIS 管理界面中创建 PHP 的程序映射：
     <div class="procedure">
      <ol type="1"><li>
       <p class="simpara">
        在 Windows 开始菜单中选择“运行...”，输入“inetmgr”并点击“确定”；
      </p>
      </li>
      <li>
       <p class="simpara">
        在 IIS 管理器中左边面板“连接”下面的树状图中选择该服务器的节点；
       </p>
      </li>
      <li>
       <p class="para">
        在中间面板下方的“功能视图”页面打开“处理程序映射”功能；
        <div class="mediaobject">
         
         <div class="imageobject">
          <img src="images/b4cf2bb34e3c20eebcf8f9e8e7949efd-iis7handlericon.png" alt="创建 PHP 的程序映射：处理程序映射的位置" width="708" height="515" />
         </div>
        </div>
       </p>
      </li>
      <li>
       <p class="simpara">在右边“操作”面板中点击“添加模块映射...”；</p>
      </li>
      <li>
       <p class="para">
        在“添加模块映射”对话框中输入以下内容：
        <ul class="itemizedlist">
         <li class="listitem">
          <span class="simpara">请求路径(P)：*.php</span>
         </li>
         <li class="listitem">
          <span class="simpara">模块(M)：FastCgiModule</span>
         </li>
         <li class="listitem">
          <span class="simpara">可执行文件(可选)(E)：C:\[Path to PHP installation]\php-cgi.exe</span>
         </li>
         <li class="listitem">
          <span class="simpara">名称(N)：PHP_via_FastCGI</span>
         </li>
        </ul>
       </p>
      </li>
      <li>
       <p class="simpara">
        点击“请求限制(R)...”按钮并选中“仅当请求映射至以下内容时才调用处理程序(I)：”然后选择“文件或文件夹(O)”；
        </p>
      </li>
      <li>
       <p class="simpara">
        在所有对话框中点击确定以保存配置。
       </p>
      </li>
     </ol></div>
     <div class="mediaobject">
      
      <div class="imageobject">
       <img src="images/b4cf2bb34e3c20eebcf8f9e8e7949efd-iis7handlermap.png" alt="创建 PHP 的程序映射：添加程序映射" width="705" height="512" />
      </div>
     </div>
    </p>
  </div>
  <div class="sect3" id="install.windows.iis7.fastcgi.conf.cmd">
   <h4 class="title">使用命令行工具创建 PHP 的程序映射</h4>
   <p class="para">
    用以下命令创建一个 IIS FastCGI 处理池以使 <var class="filename">php-cgi.exe</var>
    可执行文件来处理 PHP 请求。用自己系统上指向 <var class="filename">php-cgi.exe</var>
    文件的绝对路径来替代 <var class="varname"><var class="varname">fullPath</var></var> 参数的值。
    <div class="example" id="example-43">
     <p><strong>Example #2 创建 IIS FastCGI 处理池</strong></p>
     <div class="example-contents">
<div class="cdata"><pre>
%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI ^
/+[fullPath=&#039;c:\PHP\php-cgi.exe&#039;]
</pre></div>
     </div>

    </div>
   </p>
   <p class="para">
    用以下命令配置 IIS 处理针对 PHP 的请求。用自己系统上指向 <var class="filename">php-cgi.exe</var>
    文件的绝对路径来替代 <var class="varname"><var class="varname">scriptProcessor</var></var> 参数的值。
    <div class="example" id="example-44">
     <p><strong>Example #3 创建对应于 PHP 请求的处理程序映射</strong></p>
     <div class="example-contents">
<div class="cdata"><pre>
%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers ^
/+[name=&#039;PHP_via_FastCGI&#039;, path=&#039;*.php&#039;,verb=&#039;*&#039;,modules=&#039;FastCgiModule&#039;,^
scriptProcessor=&#039;c:\PHP\php-cgi.exe&#039;,resourceType=&#039;Either&#039;]
</pre></div>
     </div>

    </div>
   </p>
   <p class="para">
    此命令创建了一个对于 *.php 文件后缀的处理程序映射，使得所有以 .php
    结尾的 URL 都会被 FastCGI 模块处理。
    <blockquote class="note"><p><strong class="note">Note</strong>: 
     <p class="para">
      至此所需的安装和配置步骤就完成了。以下剩余的指示是可选项，但是强烈推荐以使得在
      IIS 上达到最佳的 PHP 功能和性能。
     </p>
    </p></blockquote>
   </p>
  </div>
 </div>
 <div class="sect2" id="install.windows.iis7.impersonation">
  <h3 class="title">角色扮演及文件系统访问</h3>
  <p class="para">
   在 IIS 中使用 PHP 建议激活 FastCGI 的角色扮演功能。此功能在 <var class="filename">php.ini</var>
   中由 <var class="varname"><var class="varname">fastcgi.impersonate</var></var> 指令控制。激活角色扮演后，PHP
   将以 IIS 所认证的用户帐号身份进行所有的文件系统操作。这将确保即使在（同一个主机）不同的
   IIS 网站下使用了同一个 PHP 进程，只要每个网站使用了不同的用户帐号作为 IIS
   身份认证，则这些网站的 PHP 脚本将不能访问彼此的文件。
  </p>
  <p class="para">
   例如在 IIS 7 中，默认配置下的匿名认证将使用内置的用户帐号 IUSR 作为默认身份。这意味着要使得
   IIS 能够运行 PHP 脚本，至少要将这些脚本的读取权限授予 IUSR 帐号。如果 PHP
   程序需要对某些文件或文件夹进行写入操作，那 IUSER 帐号也需要有相对应的写入权限。
  </p>
  <p class="para">
   在 IIS 7 中要查看哪个用户帐号被用作匿名认证的身份，使用以下命令。将其中的
   &quot;Default Web Site&quot; 替换为自己使用的网站名。在输出的 XML
   配置单元中查找 <var class="varname"><var class="varname">userName</var></var> 属性。（注意：要以管理员身份运行此命令行）
   <div class="example" id="example-45">
    <p><strong>Example #4 确定用于 IIS 匿名认证的用户帐号</strong></p>
    <div class="example-contents">
<div class="cdata"><pre>
%windir%\system32\inetsrv\appcmd.exe list config &quot;Default Web Site&quot; ^
/section:anonymousAuthentication

&lt;system.webServer&gt;
  &lt;security&gt;
    &lt;authentication&gt;
      &lt;anonymousAuthentication enabled=&quot;true&quot; userName=&quot;IUSR&quot; /&gt;
    &lt;/authentication&gt;
   &lt;/security&gt;
&lt;/system.webServer&gt;
</pre></div>
    </div>

   </div>
   <blockquote class="note"><p><strong class="note">Note</strong>: 
    <p class="para">
     如果在 <var class="varname"><var class="varname">anonymousAuthentication</var></var>
     单元中没有显示 <var class="varname"><var class="varname">userName</var></var>
     属性，或者其值为一个空字符串，那意味着应用程序池的身份被用于该网站的匿名身份。
    </p>
   </p></blockquote>
  </p>
  <p class="para">
   要修改文件及文件夹的权限，使用 Windows 资源管理器或者 <var class="varname"><var class="varname">icacls</var></var> 命令行。
   <div class="example" id="example-46">
    <p><strong>Example #5 配置文件访问权限</strong></p>
    <div class="example-contents">
<div class="cdata"><pre>
icacls C:\inetpub\wwwroot\upload /grant IUSR:(OI)(CI)(M)
</pre></div>
    </div>

   </div>
  </p>
 </div>
 <div class="sect2" id="install.windows.iis7.defaultdoc">
  <h3 class="title">在 IIS 中把 <var class="filename">index.php</var> 设定为默认文档</h3>
  <p class="para">
   IIS 的默认文档用于没有指定文件名的 HTTP 请求。对于 PHP 应用来说默认文档通常为
   <var class="filename">index.php</var>。要将 <var class="filename">index.php</var>
   添加到 IIS 的默认文档列表中，使用此命令：
   <div class="example" id="example-47">
    <p><strong>Example #6 将 <var class="filename">index.php</var> 设为 IIS 的默认文档</strong></p>
    <div class="example-contents">
<div class="cdata"><pre>
%windir%\system32\inetsrv\appcmd.exe set config ^
-section:system.webServer/defaultDocument /+&quot;files.[value=&#039;index.php&#039;]&quot; ^
/commit:apphost
</pre></div>
    </div>

   </div>   
  </p>
 </div>
 <div class="sect2" id="install.windows.iis7.recycling">
  <h3 class="title">FastCGI 和 PHP 回收配置</h3>
  <p class="para">
   用以下命令配置 IIS FastCGI 对于 PHP 进程的回收设定。FastCGI 的设置
   <var class="varname"><var class="varname">instanceMaxRequests</var></var> 控制了单一的 <var class="filename">php-cgi.exe</var>
   进程处理多少个请求之后会被 IIS 关闭。PHP 环境变量 <var class="varname"><var class="varname">PHP_FCGI_MAX_REQUESTS</var></var>
   控制了一个 <var class="filename">php-cgi.exe</var>
   进程处理多少个请求之后会被自我回收。要确保 FastCGI 中 <var class="varname"><var class="varname">InstanceMaxRequests</var></var>
   的值小于或等于 <var class="varname"><var class="varname">PHP_FCGI_MAX_REQUESTS</var></var> 的值。
   <div class="example" id="example-48">
    <p><strong>Example #7 配置 FastCGI 和 PHP 的回收</strong></p>
    <div class="example-contents">
<div class="cdata"><pre>
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath=&#039;c:\php\php-cgi.exe&#039;].instanceMaxRequests:10000

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/+&quot;[fullPath=&#039;C:\{php_folder}\php-cgi.exe&#039;].environmentVariables.^
[name=&#039;PHP_FCGI_MAX_REQUESTS&#039;,value=&#039;10000&#039;]&quot;
</pre></div>
    </div>

   </div>
  </p>
 </div>
 <div class="sect2" id="install.windows.iis7.timeouts">
  <h3 class="title">FastCGI 超时设定</h3>
  <p class="para">
   如果会有一些需时较长的 PHP 脚本运行，则增加超时的设定值。有两个控制超时的指令
   <var class="varname"><var class="varname">activityTimeout</var></var> 和
   <var class="varname"><var class="varname">requestTimeout</var></var>。用以下命令修改超时设定。确保在
   <var class="varname"><var class="varname">fullPath</var></var> 的参数中使用自己系统上的
   <var class="filename">php-cgi.exe</var> 的绝对路径。
   <div class="example" id="example-49">
    <p><strong>Example #8 配置 FastCGI 超时设定</strong></p>
    <div class="example-contents">
<div class="cdata"><pre>
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath=&#039;C:\php\php-cgi.exe&#039;,arguments=&#039;&#039;].activityTimeout:&quot;90&quot;  /commit:apphost

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath=&#039;C:\php\php-cgi.exe&#039;,arguments=&#039;&#039;].requestTimeout:&quot;90&quot;  /commit:apphost
</pre></div>
    </div>

   </div>   
  </p>
 </div>
 <div class="sect2" id="install.windows.iis7.phpinilocation">
  <h3 class="title">改变 <var class="filename">php.ini</var> 文件的位置</h3>
  <p class="para">
   PHP 在几个位置搜索<a href="configuration.file.html" class="link">配置文件</a>
   <var class="filename">php.ini</var>，可以通过环境变量 <var class="varname"><var class="varname">PHPRC</var></var>
   来改变 <var class="filename">php.ini</var> 的默认位置。要使得 PHP 从用户指定的位置加载配置文件，使用以下命令。指向
   <var class="filename">php.ini</var> 文件的绝对路径应作为环境变量 <var class="varname"><var class="varname">PHPRC</var></var>
   的值。
   <div class="example" id="example-50">
    <p><strong>Example #9 改变 <var class="filename">php.ini</var> 文件的位置</strong></p>
    <div class="example-contents">
<div class="cdata"><pre>
appcmd.exe set config  -section:system.webServer/fastCgi ^
/+&quot;[fullPath=&#039;C:\php\php.exe&#039;,arguments=&#039;&#039;].environmentVariables.^
[name=&#039;PHPRC&#039;,value=&#039;C:\Some\Directory\&#039;]&quot; /commit:apphost
</pre></div>         
    </div>

   </div>   
  </p>
 </div>
</div><hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="install.windows.iis6.html">Microsoft IIS 5.1 和 IIS 6.0</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="install.windows.apache1.html">Microsoft Windows 下的 Apache 1.3.x</a></div>
 <div class="up"><a href="install.windows.html">Windows 系统下的安装</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>
